﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Foundation;

namespace DecisionCircle.Platform
{
    public static class Physical
    {
       
        public const double dGamma = -Math.PI * 2;
        /// <summary>
        /// Tính năng lượng ban đầu truyền vào từ vector trên màn hình
        /// </summary>
        /// <param name="point1">Điểm chạm đầu tiên khi kích vào màn hình</param>
        /// <param name="point2">Điểm chạm cuối cùng từ sau điểm point1</param>
        /// <returns></returns>
        public static double LengthVector(Point point1, Point point2)
        {
            return Math.Sqrt(Math.Pow(point2.X - point1.X, 2) + Math.Pow(point2.Y - point1.Y, 2));
        }


        /// <summary>
        /// Tính tốc độ góc ban đầu khi truyền vào 1 vận tốc Vo
        /// </summary>
        /// <param name="Vo">Độ lớn vận tốc Vo truyền vào</param>
        /// <param name="R">Bán kính đường tròn</param>
        /// <returns></returns>
        public static double Omega0(double Vo, double R)
        {
            return Vo / R;
        }

        /// <summary>
        /// Tính tốc độ góc tại 1 điểm trên đường tròn tại thời gian t
        /// </summary>
        /// <param name="Omega0">Tốc độ góc ban đầu</param>
        /// <param name="t">Thời điểm hiện tại</param>
        /// <returns></returns>
        public static double Omega(double Omega0, double t)
        {
            double rs = Omega0 + dGamma * t;
            if (rs < 1 && rs > 0)
            {
                rs = 1;
            }
            return rs;
        }
        /// <summary>
        /// Chuyển trục tọa độ của màn hình thành trục tọa độ chuẩn XY theo với tâm mới
        /// </summary>
        /// <param name="pt">Tọa độ cần chuyển</param>
        /// <param name="Origin">Tọa độ cũ của tâm mới</param>
        /// <returns></returns>
        public static Point TransferCoordinates(Point pt, Point Origin)
        {
            double x = pt.X - Origin.X;
            double y = -pt.Y + Origin.Y;

            return new Point(x, y);
        }

        /// <summary>
        /// Trả về vị trí góc phần tư của vector
        /// </summary>
        /// <param name="TransferPoint">Điểm đã được chuyển thành tọa độ mới</param>
        /// <returns></returns>
        public static int DirectionPointer(Point TransferPoint)
        {
            var pt = TransferPoint;
            var X = Math.Abs(pt.X);
            var Y = Math.Abs(pt.Y);

            //Góc I
            if (pt.X > 0 && pt.Y >= 0)
            {
                return 1;
            }

            //Góc IV
            if(pt.X >= 0 && pt.Y < 0)
            {
                return 4;
            }

            //Góc III
            if (pt.X < 0 && pt.Y <= 0)
            {
                return 3;
            }

            //Góc II
            if (pt.X <= 0 && pt.Y > 0)
            {
                return 2;
            }

            return 0;
        }

    }
}
